/**
 * [94] 二叉树的中序遍历
 *
 * @format
 * @lc app=leetcode.cn id=94 lang=javascript
 */

// @lc code=start
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
// 迭代 + 子节点链接（不消耗额外空间）
var inorderTraversal = function (root) {
    const result = []
    if (root == null) return result
    let pre = root
    while (1) {
        if (!root.left) {
            result.push(root.val)
        } else {
            root = root.left
        }
    }
    return result
}
// 迭代 + 栈（借助栈回溯）
/* var inorderTraversal = function (root) {
    // stack 中只存入非空节点（有 .val 属性）
    const stack = []
    const result = []
    while (root || stack.length > 0) {
        if (root) {
            stack.push(root)
            root = root.left
        } else {
            root = stack.pop()
            result.push(root.val)
            root = root.right
        }
    }
    return result
} */
// 递归
/* var inorderTraversal = function (root) {
    if (root == null) return []
    const left = inorderTraversal(root.left)
    const right = inorderTraversal(root.right)
    return [...left, root.val, ...right]
} */
// @lc code=end
